﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.Common;
using System.Data.SqlClient;
using EnvDTE;
using EnvDTE80;
using System.Reflection;
using System.Xml.Linq;
using System.Xml;
using System.Diagnostics;
using System.Xml.XPath;
using System.IO;
using System.Text.RegularExpressions;
using System.Resources;
using MVCScaffold.GeradoresDeCodigo;

namespace MVCScaffold.UI
{
    public partial class Configuracoes : Form
    {
        public Configuracoes()
            : this(null, null)
        {
            InitializeComponent();
        }

        public Configuracoes(DTE2 applicationObject, AddIn addInInstance)
        {
            InitializeComponent();
            this.applicationObject = applicationObject;
            this.addInInstance = addInInstance;
            this.resourceManager = new ResourceManager("MVCScaffold.UI.Mensagens.MVCScaffold", typeof(Configuracoes).Assembly);

            this.SetarIconeForm();
        }

        private void SetarIconeForm()
        {
            try
            {
                this.Icon = MVCScaffold.Properties.Resources.IconeForm;
            }
            catch { }
        }

        private DTE2 applicationObject;
        private AddIn addInInstance;
        private ResourceManager resourceManager;
        private GerenciadorEdmx gerenciadorEDMX = null;
        private GerenciadorArquivoProjeto gerenciadorArquivoProjeto = null;

        private void buttonProcurar_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = null;
            try
            {
                openFileDialog = new OpenFileDialog();
                openFileDialog.Filter = "Visual C# Project File (*.csproj)|*.csproj";

                if (Directory.Exists(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), @"Visual Studio 2008\Projects")))
                    openFileDialog.InitialDirectory = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), @"Visual Studio 2008\Projects");

                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    gerenciadorArquivoProjeto = new GerenciadorArquivoProjeto(openFileDialog.FileName);
                    if (!String.IsNullOrEmpty(gerenciadorArquivoProjeto.NomeArquivoEDMX))
                    {
                        textBoxArquivoProjeto.Text = openFileDialog.FileName;
                        gerenciadorEDMX = new GerenciadorEdmx(Path.Combine(gerenciadorArquivoProjeto.DiretorioProjeto, gerenciadorArquivoProjeto.NomeArquivoEDMX));
                        this.MontarGridComEntidades();
                    }
                    else
                    {
                        MessageBox.Show(resourceManager.GetString("EDMXNaoEncontrado"), "ASP.NET MVC Scaffold", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "ASP.NET MVC Scaffold", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void MontarGridComEntidades()
        {
            panelPrincipal.Controls.Clear();
            int contador = 0;

            foreach (var item in gerenciadorEDMX.Entidades.OrderBy(x => x.Name))
            {
                panelPrincipal.Controls.Add(new UserControlEntidade()
                {
                    Location = new Point(10, contador * 30),
                    Entidade = item
                });
                contador++;
            }
        }

        private void buttonGerarCodigo_Click(object sender, EventArgs e)
        {
            GeradorBase gerenciadorTemplates = null;
            try
            {
                if (gerenciadorEDMX == null || gerenciadorArquivoProjeto == null)
                {
                    MessageBox.Show(resourceManager.GetString("EDMXNaoEncontrado"), "ASP.NET MVC Scaffold", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }

                gerenciadorTemplates = new GeradorCSharp(gerenciadorEDMX, gerenciadorArquivoProjeto, applicationObject);
                gerenciadorTemplates.Executar();
                MessageBox.Show(resourceManager.GetString("MensagemSucesso"), "ASP.NET MVC Scaffold", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "ASP.NET MVC Scaffold", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
